import router from "@/router";
import storage from "./storage";
import store from "@/store";
//判断本地是否有token，如果有，就放行
router.beforeEach((to, from, next) => {
  let token = storage.get("qf-token");
  //   to   目标路由对象
  // from   源路由对象
  // next  是个函数，调用之后， 可以理解为放行

  if (token) {
    //要判断是否有用户菜单
    if (!store.state.permission.userMenu.length) {
      //发起请求获取远程菜单
      store.dispatch("permission/FETCH_MENU_LIST").then(() => {
        //这里要注意, next里面要传参数即要进入的页面的路由信息，因为next传参数后，当前要进入的路由会被废止，转而进入参数对应的路由，虽然是同一个路由，这么做主要是为了确保addRoutes生效了,并且不产生历史记录
        next({ path: to.path, replace: true, query: to.query });
      });
    } else {
      next();
    }
  } else {
    //没有token
    //1.访问的是登录页
    // 2.访问的不是登录页，强行调回登录页
    if (to.path === "/login") {
      next();
    } else {
      next({
        path: "/login",
      });
    }
  }
  next();
});

export default router;
